package com.tbit.uqbike.webmanager.dao.core;

import com.tbit.uqbike.object.pojo.Coupon;
import com.tbit.uqbike.object.pojo.CouponUser;
import com.tbit.uqbike.object.pojo.vo.CouponUserVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * @author chenmengran
 * @Description: 优惠券
 * @date 2019\12\27 002716:44
 */
public interface CouponDao {

    /**
     * 添加优惠券
     *
     * @param coupon
     */
    void insertUP(Coupon coupon);

    /**
     * 分页查找
     *
     * @return
     */
    List<Coupon> queryPage(Map<String, Object> params);

    /**
     * 获取总数
     *
     * @param accountId
     * @return
     */
    Integer getTotal(Integer accountId);

    /**
     * 获取对应优惠券
     *
     * @param couponId
     * @return
     */
    Coupon getByCouponId(Integer couponId);

    /**
     * 获取可以优惠券
     *
     * @param params
     * @return
     */
    List<Coupon> getCouponIsVail(Map<String, Object> params);

    /**
     * 更新
     *
     * @param coupon
     */
    void update(Coupon coupon);

    /**
     * 获取所有已失效的优惠券
     *
     * @return
     */
    List<Integer> getAllExpire();


    /**
     * 用户优惠券分页
     *
     * @param params
     * @return
     */
    List<CouponUser> getByUserIdPage(Map<String, Object> params);

    /**
     * 用户优惠券分页总数
     *
     * @param params
     * @return
     */
    Integer getByUserIdCount(Map<String, Object> params);

    /**
     * 批量赠送用户优惠券
     *
     * @param list
     */
    void addBatch(List<CouponUser> list);

    void userCouponEdit(@Param("couponUserId") Integer couponUserId, @Param("userId") Integer userId);

    /**
     * 根据用户id查询区域id
     */
    Integer getOnlyAccountId(Integer userId);


    List<Coupon> getListByIds(@Param("couponIds") List<Integer> couponIds);

    /**
     * 获取有效优惠券
     * @param accountId 区域id
     * @return List<Coupon>
     */
    List<Coupon> getCouponByAccountId(@Param("accountId") Integer accountId);

    /**
     * 批量新增优惠券
     * @param coupons 优惠券集合
     */
    void batchAdd(@Param("coupons") List<Coupon> coupons);

    void deleteByAccountId(@Param("accountId") Integer accountId);

    /**
     * 根据用户id和区域id集合获取最近优惠劵赠送记录
     *
     * @param userId        查询条件
     * @param accountIdList 查询条件
     */
    CouponUser selectByAccountIdList(@Param("userId") Integer userId, @Param("accountIdList") List<Integer> accountIdList);

    /**
     * 获取对应用户的可用优惠券
     * @param userId    用户id
     * @param accountId 区域id
     * @return List<Coupon>
     */
    List<CouponUserVO> getEfficientCoupon(@Param("userId") Integer userId, @Param("accountId") Integer accountId);

    /**
     * 根据优惠券id获取优惠券
     * @param couponUserId 优惠券id
     * @return  Coupon
     */
    Coupon getByCouponUserId(@Param("couponUserId") Integer couponUserId);
}
